package com.sky.mapper;

import com.sky.annotation.AutoFill;
import com.sky.entity.Dish;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.sky.enumeration.OperationType;
import com.sky.vo.DishVO;
import org.apache.ibatis.annotations.Select;
import org.springframework.data.repository.query.Param;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
* @author luo20
* @description 针对表【dish(菜品)】的数据库操作Mapper
* @createDate 2025-07-06 16:37:09
* @Entity com.sky.entity.Dish
*/
public interface DishMapper extends BaseMapper<Dish> {
    /**
     * 新增菜品功能
     * @param dish
     * @return
     */
    @AutoFill(value = OperationType.INSERT)
    Integer save(Dish dish);

    /**
     * 根据条件查询菜品数据
     *
     * @param map
     * @return
     */
    List<DishVO> selectByConditions(Map<String, Object> map);

    /**
     * 菜品起售、停售
     * @param dish
     * @return
     */
    @AutoFill(value = OperationType.UPDATE)
    Integer updStartOrStop(Dish dish);

    /**
     * 根据id查询菜品数据
     */
    DishVO getDishByIdWithFlavor(@Param("id") Long id);

    /**
     * 根据菜品id更新菜品功能
     * @param dish
     * @return
     */
    @AutoFill(value = OperationType.UPDATE)
    Integer updDishById(Dish dish);


    /**
     * 或分类id或菜品名称查询菜品
     * @param dish
     * @return
     */
    List<Dish> selectByDishConditions(Dish dish);

    /**
     * 根据菜品id查询是否起售
     * @param ids
     * @return
     */
    List<Dish> selectByDishIds(@Param("ids") List<Long> ids);

    /**
     * 根据菜品id批量删除菜品功能
     * @param dishIds
     * @return
     */
    Integer deleteByDishIds(@Param("dishIds") List<Long> dishIds);

    /**
     * 根据菜品id和状态是否是起售查询菜品是否存在
     * @return dishConditions
     */
    List<Dish> selectBatchByDishConditions(@Param("dishConditions") List<Dish> dishConditions);

    /**
     * 批量更新菜品状态
     * @param dishList
     * @return
     */
    @AutoFill(value = OperationType.UPDATE)
    Integer batchUpdateStatus(@Param("dishList") List<Dish> dishList);

    /**
     * 根据分类id和菜品状态查询菜品和口味
     * @param map
     * @return
     */
    List<DishVO> getDishWithFlavorsByCategoryId(HashMap<String, Object> map);

    /**
     * 根据菜品状态获取菜品数量
     * @param status
     * @return
     */
    @Select("select count(id) from dish where status = #{status}")
    Integer countDishOverview(@Param("status") Integer status);
}




